Organizationsのdeclarative policiesでIMDSv1許容のEC2を禁止できるか試す

Organizationsのdeclarative policiesでIMDSv1許容のEC2を禁止できるか試す

AWS Organizations新機能で組織のIMDS管理が楽に!完全禁止はできないものの、IMDSv2のデフォルト設定を組織レベルで一括管理可能に。既存EC2への影響なくセキュリティ強化がより手軽に実現できる機能を詳しく検証しました
Clock Icon2024.12.03

はじめに

今回は先日公開されたOrganizationsのdeclarative policiesの中で、特にIMDS周りの制御に関して調査してみます。

https://dev.classmethod.jp/articles/aws-organizations-declarative-policies-available/

IMDSは基本v2で使うことがメインだと思いますが、コンソールからEC2を作成した場合IMDSv1を許容して作成してしまうというケースは未だにあるかと思います。今回の設定でそれを組織的に防げるのか、また既存のIMDSv1の設定のEC2はどうなるのかなどを検証してみます。

結論

  • この機能はアカウントレベルのIMDS デフォルト設定を組織で管理できようになるもの
  • メンバーアカウント側でEC2作成時に設定を変えるとIMDS v1を許容するインスタンスは作成可能なので、完全に禁止はできない

検証パターン

設定を有効化した際の影響を確認するため、以下のEC2に対して影響を試していきます。

  • IMDSv1を許容するEC2を作成後、設定適用
  • IMDSv2を必須となるEC2を作成後、設定適用
  • 設定適用後にIMDSv1を許容するEC2を作成

やってみた

EC2をメンバーアカウントで事前準備

まず事前に以下のようにIMDSv1/2のEC2をメンバーアカウント上で作成しておきます。

スクリーンショット 2024-12-03 21.18.18.png

IMDSv1許容の場合の表示

スクリーンショット 2024-12-03 21.19.23.png

IMDSv1必須の場合の表示

スクリーンショット 2024-12-03 21.21.20.png

ちなみにIMDSv1を許容するインスンタンスは以下のようにコンソール上で設定して作ります。

スクリーンショット 2024-12-03 21.15.45.png

最後にアカウントレベルのIMDS デフォルト設定を確認します。以下のように特に指定はされていなく変更可能です。
スクリーンショット 2024-12-03 22.02.10.png

管理アカウントでdeclarative policiesを有効化

以下のようにOrganizationsから画面操作を進め設定を有効化していきます。
まずは「EC2宣言的ポリシーを有効にする」を押下して設定を有効化します。

スクリーンショット 2024-12-03 20.36.07.png

「ポリシーを作成」で今回作成する設定を作ります。
スクリーンショット 2024-12-03 21.26.00.png

ポリシー名は適当にno-use-imdsv1と付けます。

スクリーンショット 2024-12-03 21.27.36.png

「サービス属性を選択」から選ぶとデフォルトで以下の用に表示されます。

スクリーンショット 2024-12-03 21.28.49.png

インスタンスメタデータサービスは優先度なし、有効、無効の3つが設定できます。

スクリーンショット 2024-12-03 21.30.50.png

メタデータのバージョンもv2のみ、優先度なし、オプションから選択できます。

スクリーンショット 2024-12-03 21.31.53.png

JSONで見ると以下のようになっています。

{
  "ec2_attributes": {
    "instance_metadata_defaults": {
      "http_tokens": {
        "@@assign": "required"
      },
      "http_put_response_hop_limit": {
        "@@assign": -1
      },
      "http_endpoint": {
        "@@assign": "no_preference"
      },
      "instance_metadata_tags": {
        "@@assign": "no_preference"
      }
    }
  }
}

詳細が気になる場合は、以下をご確認ください。

https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-default-imds-version

今回は、IMDSv2を強制するため設定はデフォルトのまま変更せず適用します。画面下部の「ポリシーを作成」を押下します。
このポリシーを適用したいOUにアタッチしていきます。

スクリーンショット 2024-12-03 21.37.07.png

当てたいOUを選択してポリシーをアタッチします。

スクリーンショット 2024-12-03 21.37.50.png

上記で設定完了です。

メンバーアカウント側で確認

最後にメンバーアカウントに戻って状態を確認します。

IMDSv1を許可していたEC2は、ポリシー適用後も変わらずでした。IMDSv2必須のEC2も変化なしです。

スクリーンショット 2024-12-03 21.40.58.png

再度アカウントレベルのIMDS デフォルト設定を確認します。以下のようにメタデータのバージョンがv2になっており、管理ボタンも押下できなくなっています。今回の機能追加でOrganizationsでこの項目を組織的に管理できるようになったことがわかります。

スクリーンショット 2024-12-03 22.04.44.png

注意:この後で新規にIMDSv1を許容するのEC2を作ってみました。デフォルト設定から手動でEC2作成時に設定変更すると作成することができました。完全にIMDSv1を許容するインスタンスの作成を禁止することはできないようでした。

所感

最初は完全に禁止する機能と勘違いしていたのですが、アカウントレベルの設定を組織で管理できるものと理解すると挙動がわかりました。抜け道はできてしまうものの、この設定が今まで組織で管理しようとするとAPI発行がアカウント単位で必要なので、後回しになっている場合も多いのではないかなと思います。自分たちでAPI実行する機能を実装するよりは負担が少ないので、この実験結果見て是非設定試してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.